iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 12
0
自我挑戰組

今晚我想來點 Ruby on Rails 系列 第 12

<Day 12>如何告訴你的 Ruby 停止運行程式

  • 分享至 

  • xImage
  •  

要怎麼樣才能提早終止程式運行

一般來說程式會跑完所有的指令或是執行到非預期的程式碼。但是如果你正在撰寫一個不需要跑整天的 Ruby 程式,你也許會想要因為一個理由或其他原因終止程式,有一些方法可以讓你執行終止程式。

怎麼執行終止程式?

來看看要怎麼執行

有許多不同的方法可以終止一個程式,

當你呼叫 exit 你的程式不會立刻停止。因為過程是這樣子的,當 Ruby 發生了 SystemExit exception 會讓其他部分的程式法有清除的機會。.

跑看看以下範例:

begin
  exit
rescue SystemExit
  p 123
end

這裡在跳出前會先印出123
如果你想要跳過這個清理程序可以使用 exit!

如下:

begin
  exit!
rescue SystemExit
  p 123
end

注意在這裡在程式結束之前並不會印出123,你也可以使用其他方法稱作 abort,這個方法可以讓你放錯誤訊息。

abort "No Bacon Left"

跟下面這個一樣:

warn "No Bacon Left!"
exit1

這個“警告”方法在標準錯誤中會印出一個錯誤訊息,那在 exit 後面的 “1” 引數又是什麼?這就是接下來要討論的東西了。

了解狀態碼

當一個程式結束的時候,不只是 ruby 程式而是所有的程式,都會留下一個狀態碼在後面。這就是你必須要知道的東西:

狀態碼為 “0“ 代表程式正常結束,而其他的狀態碼同常都是其他錯誤狀態的訊號。回傳”0“以外的狀態碼效果取決於你當下的環境,這對運行系統或一般程式是有幫助的,可以透過狀態碼去監測、記錄檔案甚至重新啟動運行失敗的程式。

在 Linux,你可以使用 echo $?去找到上一個程式結束的狀態碼。

讓我們回到 ruby,當你呼叫 exit 預設的狀態碼為“0“。你可以傳另一個狀態碼當作一個引數。這就是為什麼當你呼叫 abort 之後狀態碼會設定為”1“,abort 方法通常是標記錯誤。

終止迴圈

如果你只想要終止一個回圈而不要終止整個程式,那你就要用一些不一樣的方法,你可以使用break關鍵字:

while 1 == 1
  break
end

不只是 while 迴圈,在 blocks 裡也是有作用的。

離開一個方法

ruby 方法會在最後一行程式碼自然結束,但如果你想要提早結束方法的話就可以使用return關鍵字。

def apples
  return "I had my two apples today"
  "bacon"
end

這段程式碼永遠不會拿到"bacon"因為在哪之前就已經return

大絕招:如何終止無限迴圈

當無限迴圈發生的時候...

Soon or later. It will happen.

有時候你忘記增加變數或意外製造無限迴圈,你可以使用這招

CTRL+C


上一篇
<Day 11> 如何使用 rails link_to 方法
下一篇
<Day 13>如何在 ruby on rails 使用 AJAX
系列文
今晚我想來點 Ruby on Rails 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言